package tpgrandt.dao;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Calendar;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import tpgrandt.control.GestionEquipo;
import tpgrandt.excepciones.EquipoFantasiaExistenteException;
import tpgrandt.varios.*;
/**
 * @version 1.0
 * @created 19-Jan-2010 18:39:27
 */
public class GeneralDAO {

	/**
	 * 
	 * @param fecha
	 */
	public static Vector<String[]> listadoGanadores(int fecha) {
            try {
                Statement st = DAO.getStatement();
                String query = "SELECT persona.nombres, persona.apellido, " +
                        "equipo_fantasia.nombre, participa.puntos_fecha, " +
                        "persona.tipo, persona.documento, participa.jugador_estrella" +
                        " FROM persona, equipo_fantasia, participa" +
                        " WHERE participa.id_fecha = " + fecha +
                        " AND persona.tipo = participa.tipo" +
                        " AND persona.documento = participa.documento" +
                        " AND equipo_fantasia.tipo = participa.tipo" +
                        " AND equipo_fantasia.documento = participa.documento" +
                        " ORDER BY participa.puntos_fecha DESC;";
                ResultSet rs = st.executeQuery(query);
                Vector<String[]> resultado = new Vector<String[]>();
                int pos = 1;
                while(rs.next()) {
                    String apellido = rs.getString("apellido");
                    String nombres = rs.getString("nombres");
                    String equipo = rs.getString("nombre");
                    String tipo = new Integer(rs.getInt("tipo")).toString();
                    String documento = new Integer(rs.getInt("documento")).toString();
                    String puntos = new Integer(rs.getInt("puntos_fecha")).toString();

                    resultado.add(new String[] {pos++ + "", apellido + ", " + nombres,
                    equipo, puntos, "", tipo, documento});
                }

                for (int i = 0; i < resultado.size(); i++) {

                    query = "SELECT  jugador.apellido, jugador.nombre AS nombre_jugador, " +
                            "equipo_primera.nombre AS nombre_equipo " +
                            "FROM jugador, equipo_primera, participa " +
                            "WHERE participa.jugador_estrella = jugador.id_jugador AND " +
                            "jugador.id_equipo = equipo_primera.id_equipo" +
                            " AND participa.tipo = " + resultado.elementAt(i)[5] +
                            " AND participa.documento = " + resultado.elementAt(i)[6] +
                            " AND participa.id_fecha = " + fecha + ";";
                    rs = st.executeQuery(query);
                    rs.next();
                    String columna = rs.getString("apellido") + ", " + rs.getString("nombre_jugador") +
                                     " (" + rs.getString("nombre_equipo") + ")";

                    resultado.elementAt(i)[4] = columna;
                }

                return resultado;
                
            } catch (SQLException ex) {
                Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
            return null;
	}

	public static Participante[] listadoGeneral(){
		return null;
	}

	/**
	 * 
	 * @param tipo
	 * @param documento
	 */
	public static Participante buscarDatosParticipante(int tipo, int documento){

	    EquipoPrimera[] equipos = EquipoPrimeraDAO.listarEquipos();
	    try {
		Statement st = DAO.getStatement();
		String query = "SELECT * FROM persona, participante WHERE " +
			"persona.tipo = " + tipo + " AND persona.documento = " +
			documento + ";";
		ResultSet rs = st.executeQuery(query);
		rs.next();
		String ape = rs.getString("apellido");
		String nom = rs.getString("nombres");
		int sexo = rs.getInt("sexo");
		String mail = rs.getString("email");

		Participante participante = new Participante(ape, nom, tipo, documento,
			"xxx", Calendar.getInstance(), sexo,
			new Domicilio("Formoza", new Integer(67), "", 0, 0, new Localidad(0, "Recreo")),
			"nachosabbag@gmail.com");

		query = "SELECT * FROM equipo_fantasia WHERE " + "tipo = "
			+ tipo + " AND documento = " + documento + ";";

		rs = st.executeQuery(query);
		rs.next();
                EquipoFantasia equipo = new EquipoFantasia(rs.getString("nombre"), rs.getInt("puntos_torneo"),
                                        rs.getInt("posicion"));
		
		query = "SELECT * FROM participa WHERE tipo = " + tipo +
			" AND documento = " + documento + ";";

		rs = st.executeQuery(query);

		Vector<PlantelFecha> planteles = new Vector<PlantelFecha>();
                Vector<Integer> ids = new Vector<Integer>();
                while (rs.next()) { // Por cada fecha en la que participa el equipo

		    // Crea el plantel
                    equipo.agregarPlantel(rs.getInt("id_fecha"));
		    planteles.add(equipo.ultimoPlantel());
		    //planteles.lastElement().setJugador_estrella(rs.getInt("jugador_estrella"));
		    planteles.lastElement().setPosicion(rs.getInt("posicion"));
		    planteles.lastElement().setPuntos(rs.getInt("puntos_fecha"));
                    planteles.lastElement().setCotizacion(rs.getInt("cotizacion"));
                    planteles.lastElement().setTransferencias(rs.getInt("transferencias"));
                    ids.add(new Integer(rs.getInt("id_plantel")));
                  
                }

                for (int i = 0; i < planteles.size(); i++) { 
		    Jugador plantel[] = new Jugador[16];
                    Integrante integ[] = new Integrante[16];
                    int idsj[] = new int[16];

                    // Crea la lista de jugadores
		    for (int j = 1; j < 16; j++) {
			// busca el integrante
			query = "SELECT * FROM integrante WHERE id_plantel = " +
				ids.elementAt(i).toString() + " AND posicion = " + (j);
			rs = st.executeQuery(query);
			rs.next();

                        int fecha = planteles.elementAt(i).getFecha();
                        integ[j] = new Integrante(fecha, j);
                        idsj[j] = rs.getInt("id_jugador");
                    }
                    
                    for (int j = 1; j < integ.length; j++) {
                        
			query = "SELECT * FROM jugador WHERE id_jugador = " + idsj[j] + ";";

			rs = st.executeQuery(query);
			rs.next();
			plantel[j] = new Jugador(rs.getInt("id_jugador"),
				rs.getString("apellido"),
				rs.getString("nombre"),
				equipos[rs.getInt("id_equipo")],
				rs.getInt("puesto") + 1,
				rs.getInt("puesto"),
				rs.getInt("cotizacion"));
                        
                        Vector<PuntajeJug> puntajes = new Vector<PuntajeJug>();
                        
                        String query2 = "SELECT partido.fecha, puntaje.puntaje_total " +
                                        "FROM puntaje, partido " +
                                        "WHERE partido.id_partido = puntaje.id_partido AND " +
                                        "puntaje.id_jugador = " + idsj[j] + ";";
                        ResultSet rs2 = st.executeQuery(query2);
                        while (rs2.next()) {
                            PuntajeJug puntaje = null;
                            int fecha = rs2.getInt("fecha");
                            int puntos = rs2.getInt("puntaje_total");
                                                        
                            switch (plantel[j].getPuesto()) {
                                case Jugador.ARQUERO:
                                    puntaje = new PuntajeArq(fecha, puntos);
                                    break;
                                case Jugador.DEFENSOR:
                                    puntaje = new PuntajeDef(fecha, puntos);
                                    break;
                                case Jugador.VOLANTE:
                                    puntaje = new PuntajeVol(fecha, puntos);
                                    break;
                                case Jugador.DELANTERO:
                                    puntaje = new PuntajeDel(fecha, puntos);
                                    break;
                            }
                            puntajes.add(puntaje);
                        }
                        plantel[j].setPuntajes(puntajes);

		    }

		    // Agrega los jugadores al plantel
                    int arq = 0;
                    int def = 0;
                    int vol = 0;
                    int del = 0;
		    for (int j = 1; j < 16; j++) {
			integ[j].setJugador1ra(plantel[j]);
                        switch (integ[j].getJugador1ra().getPuesto()) {
                            case Jugador.ARQUERO:
                                if (arq < 1 && integ[j].getPuntos() != null) {
                                    arq++;
                                    integ[j].setParticipa(true);
                                }
                                break;
                            case Jugador.DEFENSOR:
                                if (def < 4 && integ[j].getPuntos() != null) {
                                    def++;
                                    integ[j].setParticipa(true);
                                }
                                break;
                            case Jugador.VOLANTE:
                                if (vol < 3 && integ[j].getPuntos() != null) {
                                    vol++;
                                    integ[j].setParticipa(true);
                                }
                                break;
                            case Jugador.DELANTERO:
                                if (del < 3 && integ[j].getPuntos() != null) {
                                    del++;
                                    integ[j].setParticipa(true);
                                }
                                break;
                            }
                        }

                    planteles.elementAt(i).setPlantel(integ);
                }
		participante.setEquipo_fantasia(equipo);

		return participante;
	    } catch (SQLException ex) {
		Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
	    }

	    return null;
	}

	/**
	 * 
	 * @param participante
	 * @param accion
	 */
	public static void guardarUltimoPlantel(Participante participante, int accion)
                throws EquipoFantasiaExistenteException{
            Statement st = DAO.getStatement();
            String query = "";

            
            // Si es el primer plantel se guarda el nombre
            if (accion == GestionEquipo.CREAR_EQUIPO) {
                try {
                    query = "SELECT * FROM equipo_fantasia WHERE nombre = '" +
                            participante.getEquipo_fantasia().getNombre() + "'";
                    ResultSet rs = st.executeQuery(query);
                    if (rs.next())
                        throw new EquipoFantasiaExistenteException("Ya existe un equipo de fantasia con ese nombre.");

                    query = "SELECT * FROM equipo_primera WHERE nombre = '" +
                            participante.getEquipo_fantasia().getNombre() + "'";

                    rs = st.executeQuery(query);
                    if (rs.next())
                        throw new EquipoFantasiaExistenteException("Ya existe un equipo de primera de división con ese nombre.");

                } catch (SQLException ex) {
                    Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
                query = "UPDATE equipo_fantasia SET nombre = '" +
                        participante.getEquipo_fantasia().getNombre() + "', puntos_torneo = 0 WHERE " +
                        "tipo = " + participante.getTipo() + " AND documento = " +
                        participante.getDocumento() + ";";
                try {
                    st.execute(query);
                } catch (SQLException ex) {
                    Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            
                       
            PlantelFecha plantel = participante.getEquipo_fantasia().ultimoPlantel();
            
            // Consulta la existencia de Participa para el usr y la fecha
            query = "SELECT * FROM participa WHERE id_fecha = " + plantel.getFecha() +
                    " AND tipo = " + participante.getTipo() + " AND documento = " + 
                    participante.getDocumento() + ";";
            
            try {
                ResultSet rs = st.executeQuery(query);
                if (rs.next()) { //Si se modifica
                    int id = rs.getInt("id_plantel");

                    for (int i = 1; i < 16; i++) {
                        query = "UPDATE integrante SET " +
                                "id_jugador = " + plantel.getJugador(i).getId_jugador() +
                                " WHERE id_plantel = " + id + " AND posicion = " +
                                plantel.getIntegrantes()[i].getPosicion() + ";";
                        st.execute(query);
                    }

                    query = "UPDATE participa SET " +
                                "transferencias = " + plantel.getTransferencias() +
                                " WHERE id_fecha = " + FechaDAO.fechaActual() +
                                " AND tipo = " + participante.getTipo() +
                                " AND documento = " + participante.getDocumento() + ";";
                    
                    st.execute(query);
                } else { // o se agrega

                    // Busco el ultimo id_plantel agregado
                    query = "SELECT MAX(id_plantel) FROM integrante";
                    int id = 0;
                    try {
                        rs = st.executeQuery(query);
                        if (rs.next())
                            id = rs.getInt(1) + 1;
                    } catch (SQLException ex) {
                        Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
                    }

                    // Agrego los jugadores al plantel
                    query = "INSERT INTO integrante (id_plantel, id_jugador, posicion) VALUES (" +
                            id + ", " + plantel.getJugador(1).getId_jugador() +
                            ", " + plantel.getIntegrantes()[1].getPosicion();
                    for (int i = 2; i < 16; i++) {
                        query += "), (" + id + ", " + plantel.getJugador(i).getId_jugador() +
                                ", " + plantel.getIntegrantes()[i].getPosicion();
                    }
                    query += ");";
                    st.execute(query);

                    // Agrego la participacion del equipo a la fecha
                    query = "INSERT INTO participa (id_fecha, id_plantel, tipo, documento, cotizacion, transferencias) " +
                            "VALUES (" + plantel.getFecha() + ", " + id + ", " +
                            participante.getTipo() + ", " + 
                            participante.getDocumento() + ", " + plantel.getCotizacion() +
                            ", " + plantel.getTransferencias() + ");";
                    st.execute(query);
                }
            } catch (SQLException ex) {
                Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
            
	}

	public static Fixture generarFixture(){
		return null;
	}

    @SuppressWarnings("empty-statement")
	public static Fecha ultimaFecha(){
	    Statement st = DAO.getStatement();

	    EquipoPrimera equipos[] = EquipoPrimeraDAO.listarEquipos();

	    String query = "SELECT * FROM partido WHERE fecha = " +
		    FechaDAO.fechaActual() + ";";
	    
		Vector<Partido> partidos = new Vector<Partido>();
		
	    try {
		ResultSet rs = st.executeQuery(query);

		while (rs.next()) {
		    EquipoPrimera local;
		    EquipoPrimera visitante;
		    int i;
		    for (i = 0; equipos[i].getId_equipo() != rs.getInt("local"); i++);
		    local = equipos[i];
		    for (i = 0; equipos[i].getId_equipo() != rs.getInt("visitante"); i++);
		    visitante = equipos[i];
		    Partido partido = new Partido();
		    partido.setEquipo_local(local);
		    partido.setEquipo_visitante(visitante);
		    partido.setEstado(rs.getInt("estado"));
		    partido.setId_partido(rs.getInt("id_partido"));
		    partidos.add(partido);
		}
	    } catch (SQLException ex) {
		Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
	    }
		
	    Partido p[] = new Partido[10];
	    p = partidos.toArray(p);
	    Fecha fecha = new Fecha(p);
	    fecha.setFecha(FechaDAO.fechaActual());

	    return fecha ;
	}

	/**
	 * 
	 * @param participante
	 */
	public static void altaParticipante(Participante participante) {
        try {
            Domicilio dom = participante.getDomicilio();
            String calle = dom.getCalle().isEmpty() ? "NULL" : "'" + dom.getCalle() + "'";
            String numero = dom.getNumero() == null ? "NULL" : dom.getNumero().toString();
            String depto = dom.getDepto().isEmpty() ? "NULL" : "'" + dom.getDepto() + "'";
            String piso = dom.getPiso() == null ? "NULL" : dom.getPiso().toString();
            String manzana = dom.getManzana() == null ? "NULL" : dom.getManzana().toString();

            Statement st = DAO.getStatement();
            String query = "INSERT INTO domicilio (id_domicilio, calle, numero, " +
                    "departamento, piso, manzana, localidad) VALUES (NULL, " +
                    calle + ", " + numero + ", " + depto + ", " + piso + ", " +
                    manzana + ", " + dom.getLocalidad().getId_localidad() + ");";
            st.execute(query);

            query = "SELECT MAX(id_domicilio) FROM domicilio;";
            ResultSet rs = st.executeQuery(query);
            rs.next();
            int id_domicilio = rs.getInt(1);
            String sha1 = "";

            // encriptacion de la pass
            try {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.update(participante.getContraseña().getBytes());
                byte[] digest = md.digest();
                    for (byte aux : digest) {
                        int b = aux & 0xff;
                        if (Integer.toHexString(b).length() == 1) {
                            sha1 += "0";
                        }
                        sha1 += Integer.toHexString(b);
                    }
            } catch (NoSuchAlgorithmException ex) {
		Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
	    }// fin encriptacion de la pass

            query = "INSERT INTO persona (tipo, documento, contrasenia, apellido," +
                    " nombres, perfil) VALUES (" + participante.getTipo() + ", " +
                    participante.getDocumento() + ", '" + sha1 +
                    "', '" + participante.getApellido() + "', '" + participante.getNombres() +
                    "', 0);";
            st.execute(query);

            int dia = participante.getFecha_nacimiento().get(Calendar.DAY_OF_MONTH);
            int mes = participante.getFecha_nacimiento().get(Calendar.MONTH);
            int anio = participante.getFecha_nacimiento().get(Calendar.YEAR);
            query = "INSERT INTO participante (tipo, documento, fecha_nac, sexo," +
                    " domicilio, email) VALUES (" + participante.getTipo() + ", " +
                    participante.getDocumento() + ", '" + anio + "/" + mes + "/" +
                    dia + "', " + participante.getSexo() + ", " + id_domicilio + ", '" +
                    participante.getEmail() + "');";

            st.execute(query);
            
            query = "INSERT INTO equipo_fantasia (tipo, documento) VALUES (" +
                    participante.getTipo() + ", " + participante.getDocumento() + ");";
            st.execute(query);

        } catch (SQLException ex) {
            Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
	}

	/**
	 * 
	 * @param tipo
	 * @param documento
	 * @param partido
	 */
	public static void guardarPartido(int tipo, int documento, Partido partido){

	}

	public static EquipoPrimera[] listarEquipos() {
	    EquipoPrimera equiposPrimera[] = EquipoPrimeraDAO.listarEquipos();
	    Statement st = DAO.getStatement();

	    try {
		for (int i = 0; i < equiposPrimera.length; i++) {
		    String query = "SELECT * FROM jugador WHERE id_equipo = " + equiposPrimera[i].getId_equipo() + ";";
		    ResultSet rs = st.executeQuery(query);
		    Vector<Jugador> plantel = new Vector<Jugador>();
		    while (rs.next()) {
			plantel.add(new Jugador(rs.getInt("id_jugador"), rs.getString("apellido"), rs.getString("nombre"), equiposPrimera[i], rs.getInt("puesto") + 1, rs.getInt("puesto"), rs.getInt("cotizacion")));
		    }
		    equiposPrimera[i].setPlantel(plantel.toArray(new Jugador[20]));
		}

		for (int i = 0; i < equiposPrimera.length; i++) {
		    Jugador plantel[] = equiposPrimera[i].getPlantel();
		    for (int j = 0; j < plantel.length; j++) {
			Vector<PuntajeJug> puntajes = new Vector<PuntajeJug>();
                        String query = "SELECT partido.fecha, puntaje.puntaje_total " +
                                        "FROM puntaje, partido " +
                                        "WHERE partido.id_partido = puntaje.id_partido AND " +
                                        "puntaje.id_jugador = " + plantel[j].getId_jugador() + ";";
                        ResultSet rs = st.executeQuery(query);
                        while (rs.next()) {
                            PuntajeJug puntaje = null;
                            int fecha = rs.getInt("fecha");
                            int puntos = rs.getInt("puntaje_total");

                            switch (plantel[j].getPuesto()) {
                                case Jugador.ARQUERO:
                                    puntaje = new PuntajeArq(fecha, puntos);
                                    break;
                                case Jugador.DEFENSOR:
                                    puntaje = new PuntajeDef(fecha, puntos);
                                    break;
                                case Jugador.VOLANTE:
                                    puntaje = new PuntajeVol(fecha, puntos);
                                    break;
                                case Jugador.DELANTERO:
                                    puntaje = new PuntajeDel(fecha, puntos);
                                    break;
                            }
                            puntajes.add(puntaje);
			}
			plantel[j].setPuntajes(puntajes);
		    }
		}


	    } catch (SQLException ex) {
		Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
	    }
	    return equiposPrimera;
	}

    @SuppressWarnings("empty-statement")
	public static Participante[] listarParticipantes() {
	    EquipoPrimera equiposPrimera[] = GeneralDAO.listarEquipos();
	    Statement st = DAO.getStatement();

	    Vector<Participante> users = new Vector<Participante>();

	    try {
	    	//Vector<EquipoFantasia> equipos = new Vector<EquipoFantasia>();
		String query = "SELECT * FROM persona, participante WHERE persona.tipo = participante.tipo AND persona.documento = participante.documento";
		ResultSet rs = st.executeQuery(query);
		while (rs.next()) {
		    Participante usr = new Participante(rs.getInt("documento"), rs.getInt("tipo"));
		    usr.setApellido(rs.getString("apellido"));
		    usr.setNombres(rs.getString("nombres"));
		    users.add(usr);
		}

		for (int i = 0; i < users.size(); i++) {
		    int id = 0;
		    PlantelFecha plantelFecha;
                    EquipoFantasia eq = null;
		    try {
			query = "SELECT * FROM equipo_fantasia WHERE tipo = "
				+ users.elementAt(i).getTipo() + " AND documento = " +
				users.elementAt(i).getDocumento() + ";";

			rs = st.executeQuery(query);
			rs.next();
                        eq = new EquipoFantasia(rs.getString("nombre"), rs.getInt("puntos_torneo"), rs.getInt("posicion"));
		
			query = "SELECT * FROM participa WHERE tipo = " +
				users.elementAt(i).getTipo() + " AND documento = " +
				users.elementAt(i).getDocumento() + " AND id_fecha = " +
				FechaDAO.fechaActual() + ";";

			rs = st.executeQuery(query);
                        try {
                            try {
                                rs.next();
				eq.agregarPlantel(rs.getInt("id_fecha"));
                            } catch (SQLException e) {
                                query = "SELECT * FROM participa WHERE tipo = " +
				users.elementAt(i).getTipo() + " AND documento = " +
				users.elementAt(i).getDocumento() + " AND id_fecha = " +
				(FechaDAO.fechaActual() - 1) + ";";

                                rs = st.executeQuery(query);

                                rs.next();
				eq.agregarPlantel(rs.getInt("id_fecha"));
                            }

                            plantelFecha = eq.ultimoPlantel();
                            //plantelFecha.setJugador_estrella(rs.getInt("jugador_estrella"));
                            plantelFecha.setPosicion(rs.getInt("posicion"));
                            plantelFecha.setPuntos(rs.getInt("puntos_fecha"));
                            plantelFecha.setCotizacion(rs.getInt("cotizacion"));
                            id = rs.getInt("id_plantel");

                        } catch (SQLException e) {
                            users.remove(i);
                            i--;
                            continue;
                        }

			Integrante integ[] = new Integrante[16];
			int idsj[] = new int[16];

			// Crea la lista de jugadores
			for (int j = 1; j < 16; j++) {
			    // busca el integrante
			    query = "SELECT * FROM integrante WHERE id_plantel = " +
				    id + " AND posicion = " + (j);
			    rs = st.executeQuery(query);
			    rs.next();

			    integ[j] = new Integrante(plantelFecha.getFecha(), j);
			    idsj[j] = rs.getInt("id_jugador");
			}
                        int arq = 0;
                        int def = 0;
                        int vol = 0;
                        int del = 0;
			for (int j = 1; j < integ.length; j++) {
			    int ideq;
			    query = "SELECT * FROM jugador WHERE id_jugador = " + idsj[j];
			    rs = st.executeQuery(query);
			    rs.next();
			    ideq = rs.getInt("id_equipo");
			    int e, f;
			    for (e = 0; ideq != equiposPrimera[e].getId_equipo(); e++);
			    for (f = 0; idsj[j] != equiposPrimera[e].getPlantel()[f].getId_jugador(); f++);

			    integ[j].setJugador1ra(equiposPrimera[e].getPlantel()[f]);
                            switch (integ[j].getJugador1ra().getPuesto()) {
                                case Jugador.ARQUERO:
                                    if (arq < 1 && integ[j].getPuntos() != null) {
                                        arq++;
                                        integ[j].setParticipa(true);
                                    }
                                    break;
                                case Jugador.DEFENSOR:
                                    if (def < 4 && integ[j].getPuntos() != null) {
                                        def++;
                                        integ[j].setParticipa(true);
                                    }
                                    break;
                                case Jugador.VOLANTE:
                                    if (vol < 3 && integ[j].getPuntos() != null) {
                                        vol++;
                                        integ[j].setParticipa(true);
                                    }
                                    break;
                                case Jugador.DELANTERO:
                                    if (del < 3 && integ[j].getPuntos() != null) {
                                        del++;
                                        integ[j].setParticipa(true);
                                    }
                                    break;
                                }
                            }

			plantelFecha.setPlantel(integ);
			users.elementAt(i).setEquipo_fantasia(eq);
                        
		    } catch (SQLException ex) {
                        Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
                    }
		}
	    } catch (SQLException ex) {
		Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
	    }

	    return users.toArray(new Participante[users.size()]);
	}

    public static void guardarUltimosPuntajes(Participante participante) {
	Statement st = DAO.getStatement();
	
	try {
	    String query = "UPDATE participa SET puntos_fecha = " +
		participante.getEquipo_fantasia().ultimoPlantel().getPuntos() +
		", jugador_estrella = " + participante.getEquipo_fantasia().ultimoPlantel().getJugador_estrella().getJugador1ra().getId_jugador() +
		" WHERE tipo = " + participante.getTipo() + 
		" AND documento = " + participante.getDocumento() +
		" AND id_fecha = " + participante.getEquipo_fantasia().ultimoPlantel().getFecha() +
		";";
	    st.execute(query);
	    
	    query = "UPDATE equipo_fantasia SET puntos_torneo = " + 
		participante.getEquipo_fantasia().getPuntos() +
		" WHERE tipo = " + participante.getTipo() + 
		" AND documento = " + participante.getDocumento() +
		";";
	    
	    st.execute(query);

	} catch (SQLException ex) {
	    Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
	}
    }

    public static void cerrarFecha(int fecha) {
        Statement st = DAO.getStatement();

        String query = "UPDATE fecha SET cerrada = 1" +
		" WHERE fecha = " + fecha + ";";
        try {
            st.execute(query);
        } catch (SQLException ex) {
            Logger.getLogger(GeneralDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
